package top.lixunda.common.validate.validate;

import top.lixunda.common.validate.core.ValidateError;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;

/**
 * @author Xumda
 * @version time:2019/12/9 13:13
 * <p>
 * 验证注解参数
 */
public interface AnnotationValidate {

    /**
     * 是否支持验证
     *
     * @param annotationClass 注解的Class
     * @return true为可以进行验证，false不支持验证
     */
    boolean support(Class annotationClass);

    /**
     * 验证一个属性
     *
     * @param annotation 原注解
     * @param field      属性对象
     * @param obj        实例对象
     * @param value      实例对象该属性的值
     * @param handler    缓存对象
     * @return 返回错误信息，验证通过返回null
     */
    ValidateError valid(Annotation annotation, Field field, Object obj, Object value, AnnotationCacheValidate handler);

}
